Cookie和Sesion

保存会话的两种技术

  1. Cookie
    • 客户端技术
    • 把用户信息写给用户浏览器,浏览器保存
  2. Session
    • 服务器技术,利用这个技术,可以保存用户的会话信息,可以把信息和数据放在Session中
    • 保存重要的信息,减少服务器资源的浪费

1.1. 操作Cookie的方法

  1. 从请求中获取Cookie信息
  2. 服务器响应给客户端Cookie
Cookie[] cookies = req.getCookies(); // 获得Cookie
cookie.getName(); // 获得Cookie中的key
cookie.getValue(); // 获得Cookie中的vlaue
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); // 新建一个Cookie
cookie.setMaxAge(24 * 60 * 60); // 设置Cookie的有效期
resp.addCookie(cookie); // 响应给客户端一个Cookie

1.2. Cookie细节问题

  1. 一个Cookie只能保存一个信息
  2. 一个web网站可以给浏览器发送多个Cookie,最多能存放20个Cookie
  3. Cookie的大小限制为4KB
  4. 浏览器上限为300个Cookie

1.3. 删除Cookie的方法

  1. 不设置有效期,默认为关闭浏览器自动失效
  2. 设置新的Cookie替代,并设置有效期时间为0

1.4. 编码问题

URLEncoder.encode(str,"utf-8")
URLDecoder.decode(str,"UTF-8")

2. Session

  • 服务器会给每一个用户(浏览器)创建一个Session对象。
  • 一个Session独占一个浏览器,只要浏览器没有关闭,Session就存在。

  • 用途:保存用户信息,保存购物车信息,整个网站中经常会使用的数据等。

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  // 解决乱码问题
  req.setCharacterEncoding("UTF-8");
  resp.setCharacterEncoding("UTF-8");
  resp.setContentType("text/html;charset=utf-8");

  // 得到Session
  HttpSession session = req.getSession();
  // 往Session中存放数据
  session.setAttribute("name", new Person("admin", 1));
  // 获取Session的ID
  String sessionId = session.getId();

  //判断Session是不是新创建
  if (session.isNew()){
    resp.getWriter().write("session创建成功,ID:"+sessionId);
  }else {
    resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
  }

  // Session创建的时候做了什么事情;
  //        Cookie cookie = new Cookie("JSESSIONID",sessionId);
  //        resp.addCookie(cookie);
}
// 得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
// 移除Session
session.removeAttribute("name");
// 手动注销Session
session.invalidate();

2.1. 在web.xml中配置Session自动过期

<!--设置Session默认的失效时间-->
<session-config>
    <!--15分钟后Session自动失效,以分钟为单位-->
    <session-timeout>15</session-timeout>
</session-config>
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""